package com.wbc.demo;

/**
 * 稀疏数组
 *
 */
public class SparseArrayDemo {

    public static void main(String[] args) {
        //创建一个二维数组 11*11
        //0表示没有，1,表示黑子 2表示白子
        int num = 0;
        int chessArr1[][] = new int[11][11];
        chessArr1[1][2] = 1;
        chessArr1[2][3] = 2;
        chessArr1[3][3] = 2;
        //原始二维数组
        System.out.println("原始数据>>>");
        for (int[] ints : chessArr1) {
            for (int anInt : ints) {
                System.out.printf("%d\t",anInt);
                if(anInt!=0){
                    num++;
                }
            }
            System.out.println();
        }


        //有效数据个数
        System.out.println("有效数据个数："+num);
        int sparse1[][] = new int[num+1][3];
        //第一行 表示  行数  列数  有效数据
        sparse1[0][0] = chessArr1.length;
        sparse1[0][1] = chessArr1[0].length;
        sparse1[0][2] = num;

        int count = 0;
        //循环原始二维数组 存入数据到稀疏数组
        for (int i = 0; i < chessArr1.length; i++) {
            for (int j = 0; j < chessArr1[0].length ; j++) {
                if(chessArr1[i][j] !=0){
                    count++;
                    sparse1[count][0] = i;
                    sparse1[count][1] = j;
                    sparse1[count][2] = chessArr1[i][j];
                }
            }
        }


        System.out.println("稀疏数组>>>");
        for (int[] ints : sparse1) {
            for (int anInt : ints) {
                System.out.printf("%d\t",anInt);
            }
            System.out.println();
        }

        System.out.println("稀疏数组恢复成二维数组>>>");

        //创建二维数组 确定行列  就是稀疏数组中的 第一行 第一个数据为行  第二个数据为列 第三个数据为有效值

        int chessArr2[][] = new int[sparse1[0][0]][sparse1[0][1]];

        for (int i = 1; i < sparse1.length; i++) {
            chessArr2[sparse1[i][0]][sparse1[i][1]] = sparse1[i][2];
        }

        System.out.println("恢复后的二维数组>>>");
        for (int[] ints : chessArr2) {
            for (int anInt : ints) {
                System.out.printf("%d\t",anInt);
            }
            System.out.println();
        }




    }
}
